package com.baitiaojun.common.domain.model.result;

import com.baitiaojun.common.constants.HttpStatus;

import java.util.HashMap;

/**
 * 通用返回结果
 */
public class CommonResult extends HashMap<String, Object> {
    /**
     * 状态码
     */
    public static final String CODE_TAG = "code";
    /**
     * 返回内容
     */
    public static final String MSG_TAG = "msg";
    /**
     * 数据对象
     */
    public static final String DATA_TAG = "data";

    public CommonResult(int code, String msg) {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
    }

    public CommonResult(int code, String msg, Object data) {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
        super.put(DATA_TAG, data);
    }

    /**
     * 返回成功状态
     * @return
     */
    public static CommonResult ok() {
        return new CommonResult(HttpStatus.SUCCESS, null);
    }

    /**
     * 返回成功消息
     * @param message
     * @return
     */
    public static CommonResult ok(Message message) {
        return new CommonResult(HttpStatus.SUCCESS, message.getMsg());
    }

    /**
     * 成功返回数据
     * @param data
     * @return
     */
    public static CommonResult ok(Object data) {
        return new CommonResult(HttpStatus.SUCCESS, null, data);
    }

    /**
     * 成功返回状态、消息、数据
     * @param msg
     * @param data
     * @return
     */
    public static CommonResult ok(String msg, Object data) {
        return new CommonResult(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回自定义正确状态和消息
     * @return 警告消息
     */
    public static CommonResult ok(Integer code, String msg) {
        return new CommonResult(code, msg);
    }

    /**
     * 返回错误状态
     * @return 警告消息
     */
    public static CommonResult error() {
        return new CommonResult(HttpStatus.ERROR, null);
    }

    /**
     * 返回错误消息
     * @param msg
     * @return
     */
    public static CommonResult error(String msg) {
        return new CommonResult(HttpStatus.ERROR, msg);
    }

    /**
     * 返回错误数据
     * @param data
     * @return
     */
    public static CommonResult error(Object data) {
        return new CommonResult(HttpStatus.ERROR, null, data);
    }

    /**
     * 返回错误状态,消息,数据
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static CommonResult error(String msg, Object data) {
        return new CommonResult(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回自定义错误状态和消息
     * @return 警告消息
     */
    public static CommonResult error(Integer code, String msg) {
        return new CommonResult(code, msg);
    }

    /**
     * 链式调用添加,成功或失败都能灵活使用
     * @param key
     * @param value
     * @return
     */
    public CommonResult put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    /**
     * 根据执行结果判断响应成功还是失败
     * @param isSuccess
     * @return
     */
    public CommonResult isSuccess(boolean isSuccess) {
        return isSuccess? ok() : error();
    }
}
